* another use of potentially invalid waypt field.
* fix erroneous comparison of optional waypt values.
#define WAYPT_GET(wpt,member,def) (((wpt)->wpt_flags.member) ? ((wpt)->member) : (def))
#define WAYPT_UNSET(wpt,member) wpt->wpt_flags.member = 0
#define WAYPT_HAS(wpt,member) ((wpt)->wpt_flags.member)
+#define WAYPT_EQUAL(wpta,wptb,member) (((wpta)->wpt_flags.member && (wptb)->wpt_flags.member && \
+ ((wpta)->member == (wptb)->member)) || \
+ (!(wpta)->wpt_flags.member && !(wptb)->wpt_flags.member))
/*
* This is a waypoint, as stored in the GPSR. It tries to not
if (wpt->cadence) {
gtc_write_xml(0, "<Cadence>%d</Cadence>\n", wpt->cadence);
}
- if (wpt->speed || wpt->power) {
+ if (WAYPT_HAS(wpt, speed) || wpt->power) {
gtc_write_xml(1, "<Extensions>\n");
gtc_write_xml(1, "<TPX xmlns=\"http://www.garmin.com/xmlschemas/ActivityExtension/v2\">\n");
/* see http://www8.garmin.com/xmlschemas/ActivityExtensionv2.xsd */
- if (wpt->speed) {
+ if (WAYPT_HAS(wpt, speed)) {
gtc_write_xml(0, "<Speed>%.3f</Speed>\n", wpt->speed);
}
if (wpt->power) {
std::abs(wpta->latitude - wptb->latitude) < .00001 &&
std::abs(wpta->longitude - wptb->longitude) < .00001 &&
std::abs(wpta->altitude - wptb->altitude) < 20 &&
- (WAYPT_HAS(wpta,course) == WAYPT_HAS(wptb,course)) &&
- (wpta->course == wptb->course) &&
- (wpta->speed == wptb->speed) &&
+ WAYPT_EQUAL(wpta, wptb, course) &&
+ WAYPT_EQUAL(wpta, wptb, speed) &&
(wpta->heartrate == wptb->heartrate) &&
(wpta->cadence == wptb->cadence) &&
- (wpta->temperature == wptb->temperature);
+ WAYPT_EQUAL(wpta, wptb, temperature);
}
void TrackFilter::trackfilter_segment_head(const route_head* rte)